package com.xh.shuati.utils;

import lombok.extern.slf4j.Slf4j;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.io.IOException;
import java.util.Base64;

import static dev.langchain4j.internal.Utils.readBytes;

@Slf4j
public class ImageUtils {

    /**
     * 判断指定路径是否是一个存在的图片文件
     *
     * @param imagePath 图片路径
     * @return 如果是有效图片文件返回 true，否则 false
     */
    public static boolean isValidImage(String imagePath) {
        if (imagePath == null || imagePath.isEmpty()) {
            return false;
        }

        Path path = Paths.get(imagePath);

        // 路径是否存在
        if (!Files.exists(path)) {
            log.error("路径不存在: " + imagePath);
            return false;
        }

        // 是否是文件
        if (!Files.isRegularFile(path)) {
            log.error("不是一个有效的文件: " + imagePath);
            return false;
        }

        // 通过扩展名判断是否是图片
        String fileName = path.getFileName().toString().toLowerCase();
        if (!(fileName.endsWith(".jpg") ||
              fileName.endsWith(".jpeg") ||
              fileName.endsWith(".png") ||
              fileName.endsWith(".gif") ||
              fileName.endsWith(".bmp"))) {
            log.error("文件不是图片格式: " + imagePath);
            return false;
        }

        // 可选：通过 MIME 类型验证是否是图片
        try {
            String mimeType = Files.probeContentType(path);
            if (mimeType == null || !mimeType.startsWith("image/")) {
                log.error("文件的 MIME 类型不是图片: " + mimeType);
                return false;
            }
        } catch (IOException e) {
            log.error("无法探测文件类型: " + imagePath);
            return false;
        }

        return true;
    }

    public static String encoderImage(String imagePath) {
        Path path = Paths.get(imagePath);
        byte[] imageBytes = readBytes(path.toUri().toString());
        return Base64.getEncoder().encodeToString(imageBytes);
    }

    public static String getFileExtension(String imagePath) {
        if (imagePath == null || imagePath.isEmpty()) {
            return "";
        }

        Path path = Paths.get(imagePath);
        String fileName = path.getFileName().toString();

        int dotIndex = fileName.lastIndexOf('.');
        if (dotIndex > 0 && dotIndex < fileName.length() - 1) {
            return fileName.substring(dotIndex + 1); // 返回后缀，如 "png"
        }

        return "";
    }
}
